#include "commonpage.h"
#include "ui_commonpage.h"
#include "listitembox.h"
#include <QDebug>

CommonPage::CommonPage(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::CommonPage)
{
    ui->setupUi(this);
    //设置不显示水平滚动条
    ui->pageMusicList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //点击播放全部按钮信号和槽函数的关联
    connect(ui->playAllBtn,&QPushButton::clicked,this,[=](){
       //播放所有按钮点击之后，通知QQMusic播放当前pageType标记的page页面中的所有歌曲
        emit playAll(pageType);//发送信号通知QQMusic类进行处理
    });
    //当ListWidget中的Item被双击时，就播放被双击的Item所对应的音乐
    connect(ui->pageMusicList,&QListWidget::doubleClicked,this,[=](const QModelIndex &index){
        //发射自定义的信号去进行处理
        //index.row()返回此Item在ListWidget中的下标
        //鼠标双击之后，发射信号告诉QQMusic，播放this界面中被双击的歌曲
        emit playMusicByIndex(this,index.row());
    });
}

CommonPage::~CommonPage()
{
    delete ui;
}
//设置page页的文本信息和图片
void CommonPage::setCommonPageUI(const QString &text, const QString &imagePath)
{
    //设置文本
    ui->PageTittle->setText(text);
    //设置图片
    ui->musicImageLabel->setPixmap(QPixmap(imagePath));
    //让图片自适应此控件的尺寸
    ui->musicImageLabel->setScaledContents(true);

}
//设置此页面的音乐列表类别[我喜欢、本地下载、最近播放]
void CommonPage::setMusicListType(PageType pageType)
{
    this->pageType=pageType;
}
//添加Music到MusicPage中
void CommonPage::addMusicToMusicPage(MusicList &musicList)
{
    //清空musicOfPage
    musicOfPage.clear();
    for(Music music : musicList)
    {
        switch(pageType)
        {
        case LIKE_PAGE:  //我喜欢
        {
            //检测此音乐是不是我喜欢
            if(music.getIsLike()==true)
            {
                //是我喜欢，就添加到musicOfPage中
                musicOfPage.push_back(music.getMusicId());
            }
            break;
        }
        case LOCAL_PAGE:  //本地下载
        {
            //将其添加到musicOfPage中
            musicOfPage.push_back(music.getMusicId());
            break;
        }
        case HISTORY_PAGE: //历史播放
        {
            //检测此音乐是不是历史播放
            if(music.getIsHistory()==true)
            {
                //将其添加到musicOfPage中
                musicOfPage.push_back(music.getMusicId());
            }
            break;
        }
        default:
        {
            qDebug()<<"暂未支持";
        }

        }
    }

}
//将Music(要更新的音乐保存在musicOfPage中)更新到此page页面的ListWidget控件中
//该方法负责将歌曲的信息更新到界面
void CommonPage::reFresh(MusicList &musicList)
{
    //将QList之前现实的已经添加的内容清空
    ui->pageMusicList->clear();
    //添加新的所有歌曲
    //将music音乐添加到此page页的ListWidget控件中
    addMusicToMusicPage(musicList);
    //循环遍历歌曲列表，确认此歌曲存在，将歌曲的信息更新到界面
    for(QString musicId:musicOfPage)
    {
        //通过UUID获取到Music对象
        iterator it=musicList.findMusicByMusicId(musicId);
        if(it==musicList.end())
        {
            //没找到就找下一个
            continue;
        }
        //将此Music的歌曲名称、作者、专辑信息更新到界面上

        //将ListBoxItem对象放置到pageMusicList中
        ListItemBox *listItemBox=new ListItemBox(this);
        //设置歌曲名称、作者、专辑、是否喜欢信息到ListItemBox中
        listItemBox->setMusicName(it->getMusicName());
        listItemBox->setMusicSinger(it->getMusicSinger());
        listItemBox->setMusicAlbumn(it->getMusicAlbumn());
        listItemBox->setLikeMusic(it->getIsLike());

        QListWidgetItem *item=new QListWidgetItem(ui->pageMusicList);
        //设置QListWidgetItem对象大小为ListItemBox的大小
        item->setSizeHint(QSize(listItemBox->width(),listItemBox->height()));
        ui->pageMusicList->setItemWidget(item, listItemBox);

        connect(listItemBox,&ListItemBox::setIsLike,this,[=](bool isLike){
            //更新歌曲的状态+
            //commonpage需要通知QQMusic，让其中的likepage localpage recentpage去更新页面的歌曲信息
            emit updataLikeMusic(isLike,it->getMusicId());
        });
    }
    //刷新一下此page页面-为了消除延迟效果-加载后不会立马显示出来
    //触发窗口重绘paintEvent事件
    /* update()：将paintEvent事件放在事件循环队列中，不会立马处理窗口重绘事件
     * repaint()：立马响应paintEvent窗口重绘事件
     */
    //触发窗口重绘paintEvent事件
    repaint();

}
//将歌曲添加到播放列表中
void CommonPage::addMusicToPlaylist(MusicList &musicList, QMediaPlaylist *playList)
{
    //循环遍历一下MusicList
    for(Music music : musicList)
    {
        switch(pageType)
        {
        //我喜欢
        case PageType::LIKE_PAGE:
        {
            //检测此音乐的类型是不是我喜欢
            if(music.getIsLike()==true)
            {
                //是我喜欢，添加到播放列表中
                playList->addMedia(music.getMusicUrl());
            }
            break;
        }
        //本地下载
        case PageType::LOCAL_PAGE:
        {
            //添加到本地下载页面的播放列表中
            playList->addMedia(music.getMusicUrl());
            break;
        }
        //最近播放
        case PageType::HISTORY_PAGE:
        {
            //检测此音乐的类型是不是最近播放
            if(music.getIsHistory()==true)
            {
                //是最近播放，将其添加到播放列表中
                playList->addMedia(music.getMusicUrl());
            }
            break;
        }
        default:
        {
            qDebug()<<"未支持页面";
        }
        }
    }
}
//通过索引来获取Music的Id信息
QString CommonPage::getMusicIdByIndex(int index)
{
    if(index>=musicOfPage.size())
    {
        qDebug()<<"无此歌曲";
        return "";
    }
    return musicOfPage[index];
}
//设置音乐图片-全部播放按钮左侧的图片
void CommonPage::setMusicImage(QPixmap pixmap)
{
    //设置正在播放的音乐的图片
    ui->musicImageLabel->setPixmap(pixmap);
    //设置平铺 自适应大小 根据QLabel的大小来进行填充
    ui->musicImageLabel->setScaledContents(true);
}
